y=4096/15; while (1) { (*screenTask)(); FntFlush(-1); Sleep(1); } Display_off(); Die(); } /////////////////////////////////////////////////////////////////////////// // // initFluff(void) // // inits fluff stuff (menuing and crap) // /////////////////////////////////////////////////////////////////////////// void initFluff(void) { int i; // // sound Debug_print(DEBUG_PRINT_SWITCH,"Fluff Init"); WHICHOVERLAY = OVERLAY__FLUFF; //init cursor to 0 scaleIn=1; cursorPos = 0; noWrap=0; //init update cursor to wrap by default noStart=0; globalTintDup=0; fromMatchup=0; writeSettings=0; for(i=0;i 0) && (!gf_pause) ; i--) { position[i].x = position[i-1].x; position[i].y = position[i-1].y; position[i].z = position[i-1].z; } position[0].x = FROM_PETES_COORD_SYS_2_MINE(puck->s3d.pos.x); position[0].y = FROM_PETES_COORD_SYS_2_MINE(puck->s3d.pos.y); position[0].z = FROM_PETES_COORD_SYS_2_MINE(puck->s3d.pos.z); // Debug_print(DEBUG_PRINT_SWITCH,"\npuck:%d, %d\n", position[0].x, position[0].y); // index = (index+1)&15; if ( (!gf_pause) && (++index == MAX_TRAIL) ) { index = MAX_TRAIL - 1; } for ( i = 0; i < 3; i++) { (*dynamicp).firepuck[i].v.ob[0] = position[0].x; (*dynamicp).firepuck[i].v.ob[1] = position[0].y; (*dynamicp).firepuck[i].v.ob[2] = position[0].z; (*dynamicp).firepuck[i].v.flag = 0; (*dynamicp).firepuck[i].v.tc[0] = 3 << 6; (*dynamicp).firepuck[i].v.tc[1] = 3 << 6; (*dynamicp).firepuck[i].v.cn[0] = r; (*dynamicp).firepuck[i].v.cn[1] = g; (*dynamicp).firepuck[i].v.cn[2] = b; (*dynamicp).firepuck[i].v.cn[3] = 200; } (*dynamicp).firepuck[2].v.ob[0] = position[index].x; (*dynamicp).firepuck[2].v.ob[1] = position[index].y; (*dynamicp).firepuck[2].v.ob[2] = position[index].z; (*dynamicp).firepuck[0].v.ob[0] += xsize; (*dynamicp).firepuck[1].v.ob[0] -= xsize; (*dynamicp).firepuck[0].v.ob[1] += ysize; (*dynamicp).firepuck[1].v.ob[1] -= ysize; Sleep(1); } } #ifdef __psx__ Vector position[MAX_TRAIL]; POLY_G3 g3[2]; long i; short angle; short index; short xsize; short ysize; short r,g,b; short transparent_rate; SVECTOR pos[3]; long p,flag; transparent_rate = TRANSON2-1; for (i=0; i<2; i++) { SetPolyG3 (&g3[i]); SetShadeTex (&g3[i],SHADEON); SetSemiTrans(&g3[i],TRANSON); } while (1) { // // Bring on new FIREPUCKS, if puck is moving fast & free while ( (puck->control) || (puck->s3d.vel.x < INCH*6) ) Sleep(1); for (i=0; is3d.pos; angle = puck->s3d.move.z; // // What color should trail be? if (puck->s3d.vel.x > FOOT*3) { r = 255; g = 128; b = 0; } else { r = 0; g = 64; b = 255; } index = 0; // // Grow trail, until puck hits something while (1) { if ( (puck->control) || (angle != puck->s3d.move.z) || (puck->s3d.vel.x < INCH*6) ) break; xsize = Cos(ANGLE090 + puck->s3d.move.z) >>6; ysize = Sin(ANGLE090 + puck->s3d.move.z) >>6; SetRotMatrix(&camera3d->rot); SetTransMatrix(&camera3d->rot); global_svector.vx = (position[index].x - camera3d->s3d.pos.x) >>12; global_svector.vy = (position[index].y - camera3d->s3d.pos.y) >>12; global_svector.vz = (position[index].z - camera3d->s3d.pos.z) >>12; pos[0].vx = global_svector.vx; pos[0].vy = global_svector.vy; pos[0].vz = global_svector.vz; setRGB0(&g3[activeBuff], 0, 0, 0); global_svector.vx = (puck->s3d.pos.x - camera3d->s3d.pos.x) >>12; global_svector.vy = (puck->s3d.pos.y - camera3d->s3d.pos.y) >>12; global_svector.vz = (puck->s3d.pos.z - camera3d->s3d.pos.z) >>12; pos[1].vx = global_svector.vx + xsize; pos[1].vy = global_svector.vy + ysize; pos[1].vz = global_svector.vz; pos[2].vx = global_svector.vx - xsize; pos[2].vy = global_svector.vy - ysize; pos[2].vz = global_svector.vz; setRGB1(&g3[activeBuff], r, g, b); setRGB2(&g3[activeBuff], r, g, b); RotTransPers3( &pos[0], &pos[1], &pos[2], &g3[activeBuff].x0, &g3[activeBuff].x1, &g3[activeBuff].x2, &p, &flag); AddPrim(lo_ot->ot[activeBuff], &g3[activeBuff]); position[index] = puck->s3d.pos; index = (index+1)&15; Sleep(1); } } #endif } /////////////////////////////////////////////////////////////////////////// // // void Task_players_faces(void) // // /////////////////////////////////////////////////////////////////////////// #if 0 void Task_players_faces(void) { #define MV_OUT 1 #define MV_IN 2 #define MV_TIME 8 #define MV_SPEED (( (230<<12)-(190<<12) )/MV_TIME) long i,j; long ypos; short team; short angle; long leagueid; LIST *list; PLAYER *player; FACE *faces[ (TEAMS*PLAYERS) ]; FACE *thisface; char *buffer; buffer = allocMem(2048*3); // // Grab PAL & VRAM we need for (i=0;is3d.face.y = ANGLE000; if (i == HOME) thisface->s3d.pos.x =-230<<12; else thisface->s3d.pos.x = 230<<12; thisface->s3d.pos.y = ypos; thisface->s3d.pos.z = SCR_Z<<12; thisface->pos_orig = thisface->s3d.pos; thisface->pos_new = thisface->s3d.pos; thisface->direction = MV_IN; thisface->location = 0; thisface->playerid = 0xff; // Not assigned Set_display(thisface,BODY,camera2d); Set_prim(thisface,BODY,PRIM_POLYFT4); Set_scale(thisface,BODY,ONE/2,ONE/2,ONE/2); Allocate_vram(&last_sprite->vram, 40, 48, BIT8); last_sprite->vramdisplay.x = last_sprite->vram.x; last_sprite->vramdisplay.y = last_sprite->vram.y; last_sprite->vramdisplay.w = 40; last_sprite->vramdisplay.h = 48; last_sprite->bit = BIT8; last_sprite->palette = Get_unique_palette(NULL, 256); Set_frame(thisface,BODY,&SHRECTV); ypos += 28<<12; list = list->next; } } while (1) { list = allplayers; while (list) { player = (PLAYER *) list->data; thisface = faces[player->actor]; if (thisface->playerid != player->playerid) { TIM_IMAGE tim_image; thisface->playerid = player->playerid; leagueid = player_info[player->team][player->playerid].player_leagueid; Load_file(DATA_TFLUFF_FACES_FACES_BIN, buffer, leagueid*3, 2048*3); CQ_sleep(NONE); Set_display(thisface,BODY,camera2d); OpenTIM(buffer); ReadTIM(&tim_image); LoadImage(&last_sprite->vramdisplay, tim_image.paddr); // // Download new PALETTE Get_palette_vram_location(last_sprite->palette); global_numcolors = 256; Download_palette(tim_image.caddr); Sleep(1); } angle = thisface->s3d.face.y; // // Where should face be? if (player->ai.control < CONTROL_CPU) thisface->direction = MV_OUT; else thisface->direction = MV_IN; if ( (thisface->direction == MV_IN) && (thisface->location > 0) ) { thisface->location--; if (player->team == HOME) thisface->s3d.pos.x -= MV_SPEED; else thisface->s3d.pos.x += MV_SPEED; } if ( (thisface->direction == MV_OUT) && (thisface->location < MV_TIME) ) { thisface->location++; if (player->team == HOME) thisface->s3d.pos.x += MV_SPEED; else thisface->s3d.pos.x -= MV_SPEED; } list = list->next; } Sleep(1); } } #endif /////////////////////////////////////////////////////////////////////////// // // void Task_spray_ice // // Sprays a bunch of ice chips, caused by a player STOPPING hard. // // For optimal speed, icesprays are specific to PSX // /////////////////////////////////////////////////////////////////////////// ICESPRAY *icememory = NULL; ICESPRAY *icefree = NULL; ICESPRAY *iceactive = NULL; void Init_ice_spray(void) { #ifdef __psx__ ICESPRAY *ice; long i,j; //Debug_print(ON,"Allocating ICESPRAY BUFFER %d\n",sizeof(ICESPRAY)*MAX_ICE_SPRAY); icememory = allocMem( sizeof(ICESPRAY)*MAX_ICE_SPRAY ); icefree = icememory; iceactive = NULL; ice = icefree; for (i=0; inext = ice+1; for (j=0; j<2; j++) { SetPolyG3 (&ice->polyg3[j]); // Init this poly  <„Bþ.(&«`----------------------------------- // PRW // Auto bg erase ON Auto_erase_on(); Add_display_list(camera3d, Scan_all); if (playMode == PLAY_MODE_SHOOTOUT) gf_shootout = ON; else gf_shootout = OFF; Xfer(Task_hockey); human_linechange(player); else Test_auto_linechange(player->team); list = list->next; } Sleep(1); } // gf_goal_scored = NO; } } /////////////////////////////////////////////////////////////////////////// // // void Kill_hockey(void) // // Kill the whole damm thing. // /////////////////////////////////////////////////////////////////////////// void Kill_hockey(void) { LIST *list; PLAYER *player; char i; int j; TASK *message_task; Set_digital_stick(OFF); //fix preston's bug with analog controller stuck in down ie_CNT_InitFeedback(); //initialize rumble packs for(i=0;idata; Kill_picon(player); Kill_arrow(player); list = list->next; } for (i=0;ivramdisplay = teamlogo_rect[team]; last_sprite->bit = BIT8; last_sprite->palette = teamlogo_pal[team]; Set_frame(message,HEAD,&SHRECTV); last_sprite->palette = -1; Set_offset(message,HEAD,-120,0,0); Add_display_list(message,Scan_message); Set_position (message,-512<<12, 80<<12, SCR_Z<<12); Message_track(message, 0<<12, 80<<12,4); for (i=0; iteam][pen->playerid].player_leagueid; Load_player_face(gameFacePtr, leagueid); // // Grab some info about penalty fname = player_info[pen->team][pen->playerid].attrib.fname; lname = player_info[pen->team][pen->playerid].attrib.lname; penalty = STR_PENALTY[pen->call]; elapsed = Elapsed_time(game_clock,period); // // Generate a string for the TIME OF PENALTY sprintf(clock,"%d:%02d",elapsed/60, elapsed%60); // Generate a string for the DURATION of penalty sprintf(time,"%d:%02d",pen->timer/60, pen->timer%60); sprintf(string1,"%s for %s", time, STR_PENALTY[pen->call] ); sprintf(string2,"%s %s at %s",fname,lname,clock); // // Add scorebox watermark Set_display(message,BODY,camera2d); Set_prim(message,BODY,PRIM_POLYFT4); Set_scale(message,BODY,7168*2,ONE*2,ONE); Set_OT(message,BODY,hilo_ot); // Set_ftex(message, BODY, FTEX_MESSAGE); Set_frame(message, BODY, &N64MESSAGE); // // Add team logo Set_display(message,HEAD,camera2d); Set_prim(message,HEAD,PRIM_SPRT); Set_OT(message,HEAD,hilo_ot); last_sprite->vramdisplay = teamlogo_rect[pen->team]; last_sprite->bit = BIT8; last_sprite->palette = teamlogo_pal[pen->team]; Set_frame(message,HEAD,&SHRECTV); last_sprite->palette = -1; Set_offset(message,HEAD,-150,0,0); // // Add player face Set_display(message,LEG,camera2d); Set_prim(message,LEG,PRIM_POLYFT4); Set_offset(message,LEG,176,0,0); Set_OT(message,LEG,hi_ot); // Set_scale(message,LEG, 2731, 2731, 2731); Set_scale(message,LEG, 2731, 2700, 2731); Set_frame(message,LEG,&GAME_FACE); // A dummy TIM // // Bring on the message... Message_track(message, 0<<12, 80<<12,4); for (i=0; i